package wrapper;

public class IntegerDemo {
    public static void main(String[] args) {
        //演示包装类的定义：
        /*
        Integer i = new Integer(100);
        Integer j = new Integer(100);
        System.out.println(i == j);
        System.out.println(i.equals(j));
//valueOf()方法会复用1个字节的缓存池（-128，127），所以k和l（如果都属于这个范围）指向同一个对象
        Integer k = Integer.valueOf(500);
        Integer l = Integer.valueOf(500);
        System.out.println(k == l);//
        System.out.println(k.equals(l));//true，包装类重写了equals方法

         */
        //演示基本类型和包装类之间的转换：
        Integer i = Integer.valueOf(100);
        int j = i.intValue();
        System.out.println(j);
        //在jdk1.5之后，可以直接使用包装类的构造方法，自动装箱
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        //触发了自动装箱，底层会调用valueOf()方法
        Integer k = 100;
        Integer l = 100;
        Integer m = k + l;
        //触发了自动拆箱，底层会调用intValue()方法
        int a = k;
        System.out.println(a);
        double n = l;
        System.out.println(m);
        System.out.println(n);

        //演示包装类的常用操作
        //可以通过包装类来获取基本类型的取值范围
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        System.out.println("int的最大值为"+max+"，最小值为"+min);

        long maxLong = Long.MAX_VALUE;
        long minLong = Long.MIN_VALUE;
        System.out.println("long的最大值为"+maxLong+"，最小值为"+minLong);
        //包装类可以将字符串转换为基本类型
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        String str = "123";
        int num = Integer.parseInt(str);
        System.out.println(num);
        String str2 = "123.456";
        double num2 = Double.parseDouble(str2);
        System.out.println(num2);

    }
}
